/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
 * @author Espe
 */
public class MiCartera extends MIDlet implements CommandListener, ItemStateListener{
    public Display pantalla;
    public Form pantallainicial; //Creo la pantalla inicial en forma de Form para extenderlo posteriormente con las opciones
    private Command salir, anadir, editar, ranking_fechas,ranking_gasto, ver_monedas, borrar, prueba;
    private Ticker tick;
    private ChoiceGroup misGastosCartera;
    public ControladorInterfaz contrInterfaz;//Delego las funciones a un controlador del dominio para desacoplar
    public String monedaReferencia="EUR";//Las siglas de la moneda de referencia, por defecto el Euro


    public MiCartera (){
        //Obtengo la referencia a la pantalla del MIDlet
        pantalla=Display.getDisplay(this);
        
        //Creo los objetos
        salir=new Command("Salir",Command.EXIT,1);
        anadir=new Command("Añadir",Command.SCREEN,1);
        editar=new Command("Editar",Command.SCREEN,1);
        ranking_fechas=new Command("Ranking por fechas",Command.SCREEN,1);
        ranking_gasto=new Command("Ranking por gasto",Command.SCREEN,1);
        ver_monedas=new Command("Ver monedas",Command.SCREEN,1);
        borrar=new Command("Borrar todos gastos",Command.SCREEN,1);
        misGastosCartera= new ChoiceGroup("Mis gastos",ChoiceGroup.EXCLUSIVE);
        contrInterfaz=new ControladorInterfaz(this);
        
        //Creo la pantalla principal del MIDlet
        pantallainicial=new Form("Mi Cartera");
        
        //Metemos gastos iniciales
        contrInterfaz.meterRegistrosGastos();

        //Metemos monedas iniciales
        contrInterfaz.meterRegistrosMonedas();

        //Añado la lista de mis gastos
        contrInterfaz.extraerGastos();

        //Veo el total de los gastos
        tick=new Ticker("Mi cartera tiene un total de: "+ String.valueOf(contrInterfaz.calculaTotalGasto(monedaReferencia))+" "+monedaReferencia);
        pantallainicial.setTicker(tick);
                
        //Inserto objetos en la pantalla
        pantallainicial.addCommand(salir);
        pantallainicial.addCommand(anadir);
        pantallainicial.addCommand(editar);
        pantallainicial.addCommand(ranking_fechas);
        pantallainicial.addCommand(ranking_gasto);
        pantallainicial.addCommand(borrar);
        pantallainicial.addCommand(ver_monedas);

        //Puebaaaaaaaaaaaaaaa
        prueba=new Command("Salir", Command.SCREEN,1);
        pantallainicial.addCommand(prueba);
        
        pantallainicial.setCommandListener(this);
        
    }
    public void startApp() {
        pantalla.setCurrent(pantallainicial);

    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c,Displayable d){
        if (c==salir){
            destroyApp(false);//parametro incondicional false para lanzar excepción si no puede ser destruido
            notifyDestroyed();
        }
        else if (c==anadir){
            contrInterfaz.anadeGasto();
        }
        else if (c==editar){
            int s=misGastosCartera.getSelectedIndex();
            contrInterfaz.editarGasto(misGastosCartera.getString(s));

        }
        else if (c==ranking_fechas){
            contrInterfaz.haceRankingFechas();

        }
         else if(c==ranking_gasto){
            contrInterfaz.haceRankingGastos();
        }
        else if (c==ver_monedas){
            contrInterfaz.muestraMonedas();

        }
        else if (c==prueba){//Pruebaaaaaaaaaaaaaaa
            
        }
        else if (c==borrar){
            contrInterfaz.borrarGastos();
        }
        else{
            pantalla.setCurrent(pantallainicial);

        }
     }

    public void itemStateChanged(Item i){
        if(i==misGastosCartera){
            //Si se selecciona algún gasto de la Cartera realizamos lo mismo que opción 2

        }
    }
       
    public void anadeStringItem(String etiqueta, String cadena, int tipo){
        StringItem auxstringitem;

        auxstringitem=new StringItem(etiqueta,"\n"+cadena,tipo);

        pantallainicial.append(auxstringitem);

    }

    public void anadeFilaChoiceGroup (String cadena){
        misGastosCartera.append(cadena,null);
    }
    
    public void anadeChoiceGroup (){

        System.out.println("Elementos del Form de pantallainicial:"+pantallainicial.size());
        if(pantallainicial.size()==0){//Si no se ha añadido ninguna vez ChoiceGrop al formulario
            System.out.println("Tamaño ChoiceGroup:"+misGastosCartera.size());
            pantallainicial.append(misGastosCartera);
            System.out.println("Devuelve item que se encuentra en la posicio0:"+pantallainicial.get(0));
        }else{
            if (pantallainicial.size()==2){//si hay dos items significa que está misGastosCartera e itemstring
                 pantallainicial.delete(1);//borra itemstring
            }
        }
    }

    public void borraGastosChoiceGroup(){
        misGastosCartera.deleteAll();
    }

    public void actualizaGastos(){
         borraGastosChoiceGroup();
        contrInterfaz.extraerGastos();
        //Renuevo el total de los gastos
        tick=new Ticker("Mi cartera tiene un total de: "+ String.valueOf(contrInterfaz.calculaTotalGasto(monedaReferencia))+" "+monedaReferencia);
        pantallainicial.setTicker(tick);
    }
   
    
    
}
